package cbm.seguridad.controller;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;

import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;

import cbm.commons.BaseController;
import cbm.commons.ConstantsWeb;
import cbm.commons.RequestHelper;
import cbm.commons.ResultadoOperacionBean;
import cbm.commons.SessionContainer;
import ejb.cbm.commons.FormatoFecha;
import ejb.cbm.commons.StackTrace2String;
import ejb.cbm.seguridad.bean.PerfilBean;
import ejb.cbm.seguridad.bean.RegistroIngresoBean;
import ejb.cbm.seguridad.bean.RegistroPerfilBean;
import ejb.cbm.seguridad.bean.UsuarioBean;
import ejb.cbm.seguridad.local.RegistroPerfilFacadeLocal;
import ejb.cbm.seguridad.local.UsuarioFacadeLocal;

public class RegistroPerfilController extends BaseController{
	
	public RegistroPerfilFacadeLocal registroPerfilFacadeLocal;

	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		String pagSig = resources.getString("gestionar_usuarios_perfiles");
		return new ModelAndView(pagSig);
	}

	public ModelAndView save(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = resources.getString("ajaxrequest");
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		RegistroPerfilBean registroPerfilBean = null;
		String tituloPopUp = "";
		try{
			registroPerfilBean = this.getFormularioAsBean(request);

			context = new InitialContext();
			registroPerfilFacadeLocal=(RegistroPerfilFacadeLocal)context.lookup("CBM/RegistroPerfilFacade/local");
			registroPerfilFacadeLocal.save(registroPerfilBean,usuarioLogeado);
			
			registroPerfilBean = registroPerfilFacadeLocal.buscar(
					registroPerfilBean.getTiporegistro(),registroPerfilBean.getValorregistro());
			
			tituloPopUp = "Modificar Registro Perfil";
			
		}catch(RuntimeException e){
			e.printStackTrace();
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al grabar");
			resultado.setMensaje(ConstantsWeb.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al grabar");
			resultado.setMensaje(ConstantsWeb.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		sessionContainer.addTemporal(ConstantsWeb.REGISTROPERFIL, registroPerfilBean);
		sessionContainer.addTemporal(ConstantsWeb.TITULOPOPUP, tituloPopUp);
		
		return new ModelAndView(paginaSig,"responseText",resultado.getAsArrayJS());
	}

	//gclv 15/09/2011
	public RegistroPerfilBean getRegistroPerfilBean(HttpServletRequest request) {
		RegistroPerfilBean registroPerfilBean = null;
		try {
			Long idRegistroPerfil = RequestHelper.getParameterLong(request, "hidIdRegistroPerfil");
			Long tipoRegistro = RequestHelper.getParameterLong(request, "selTipoRegistro");
			String valorRegistro = RequestHelper.getParameterString(request, "txtValorRegistro");			
			Long codigoPerfil = RequestHelper.getParameterLong(request, "selPerfil");
			String descripcion = RequestHelper.getParameterString(request, "txtDescripcion");
			Long flagActivo = RequestHelper.getParameterLong(request, "selEstado");
			
			registroPerfilBean = new RegistroPerfilBean();
			registroPerfilBean.setIdregistroperfil(idRegistroPerfil);
			registroPerfilBean.setTiporegistro(tipoRegistro);
			registroPerfilBean.setValorregistro(valorRegistro);
			registroPerfilBean.setCodigoperfil(codigoPerfil);
			registroPerfilBean.setDescripcion(descripcion);
			registroPerfilBean.setFlagactivo(flagActivo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return registroPerfilBean;
	}

	public ModelAndView buscar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "seguridad/UsuariosPerfilesTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		//RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(Constants.REGISTRO_INGRESO);
		Context context = null;
		RegistroPerfilBean filtro = null;
		List<RegistroPerfilBean> listResultado = null;
		
		try{
			filtro = getRegistroPerfilBean(request);
			//filtro = this.getFormularioAsBean(request);
			context = new InitialContext();
			registroPerfilFacadeLocal =(RegistroPerfilFacadeLocal)context.lookup("CBM/RegistroPerfilFacade/local");

			listResultado = registroPerfilFacadeLocal.buscar(filtro);
			
			if(listResultado.size()==0)listResultado = null;

		}catch(RuntimeException e){
			e.printStackTrace();
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			e.printStackTrace();
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, listResultado);
		return new ModelAndView(paginaSig);
	}
	
	public ModelAndView openMantenimiento(HttpServletRequest request, HttpServletResponse response){
		String pagSig = "seguridad/UsuarioPerfilMnt.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		HttpSession session = request.getSession(false);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		RegistroPerfilBean registroPerfilBean = null;
		String tituloPopUp = "Nuevo Registro Perfil";
		
		try{ 
			Long idRegistroPerfil = RequestHelper.getParameterLong(request,"idRegistroPerfil");
			
			registroPerfilBean = new RegistroPerfilBean();
			
			context = new InitialContext();
			registroPerfilFacadeLocal=(RegistroPerfilFacadeLocal)context.lookup("CBM/RegistroPerfilFacade/local");
			
			
			if (idRegistroPerfil != null && idRegistroPerfil > 0){
				registroPerfilBean = registroPerfilFacadeLocal.buscar(idRegistroPerfil);
				tituloPopUp = "Modificar Registro Perfil";
			}

		}catch(RuntimeException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		sessionContainer.addTemporal(ConstantsWeb.REGISTROPERFIL, registroPerfilBean);
		sessionContainer.addTemporal(ConstantsWeb.TITULOPOPUP, tituloPopUp);
		
		return new ModelAndView(pagSig);
	}
	
	private RegistroPerfilBean getFormularioAsBean(HttpServletRequest request){
		
		RegistroPerfilBean datosFormulario = new RegistroPerfilBean();
		
		
		Long codigoTipoRegitro = RequestHelper.getParameterLong(request, "selTipoRegistro");
		String valorRegistro = RequestHelper.getParameterString(request, "txtValorRegistro");
		Long codigoPerfil = RequestHelper.getParameterLong(request, "selPerfil");
		String descripcion = RequestHelper.getParameterString(request, "txtDescripcion");

		datosFormulario.setTiporegistro(codigoTipoRegitro);
		datosFormulario.setValorregistro(valorRegistro);
		datosFormulario.setFlagactivo(codigoPerfil);
		datosFormulario.setDescripcion(descripcion);
		
		return datosFormulario;
	}
	
	public ModelAndView eliminar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "seguridad/UsuariosPerfilesTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		Context context = null;
		RegistroPerfilBean registroPerfilBean = null;
		RegistroPerfilBean filtro = null;
		List<RegistroPerfilBean> lista = null;
		
		try{
			Long idRegistroPerfil = RequestHelper.getParameterLong(request,"hidIdRegistroPerfil");
			registroPerfilBean = new RegistroPerfilBean();
			registroPerfilBean.setIdregistroperfil(idRegistroPerfil);
			registroPerfilBean.setFechamodificacion(new Date(System.currentTimeMillis()));
			registroPerfilBean.setUsuariomodificacion(registroIngreso.getCodigousuario());
			registroPerfilBean.setFlagactivo(new Long(0));
			
			context = new InitialContext();
			registroPerfilFacadeLocal=(RegistroPerfilFacadeLocal)context.lookup("CBM/RegistroPerfilFacade/local");
			registroPerfilFacadeLocal.save(registroPerfilBean, usuarioLogeado);
			
			filtro = getFormularioAsBean(request);
			
			context = new InitialContext();
			lista = registroPerfilFacadeLocal.buscar(filtro);
			
			if (lista.size() == 0) lista=null;
			
		}catch(RuntimeException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, lista);
		return new ModelAndView(paginaSig);
	}
}